package ar.edu.utn.frgp.labtec.actions.administracion.depertamento;

import java.sql.SQLException;

import org.springframework.dao.DataIntegrityViolationException;

import ar.edu.utn.frgp.labtec.constants.WebConstants;
import ar.edu.utn.frgp.labtec.entities.Departamento;
import ar.edu.utn.frgp.labtec.entities.EstadoEnum;
import ar.edu.utn.frgp.labtec.service.GestionDepartamentoService;

@SuppressWarnings("serial")
public class GestionDepartamentoAction  extends	DepartamentoAction  {
	
	public String execute(){
		
		String actionReturn = SUCCESS;
		
		if(WebConstants.GESTION_NEW.equals(typeModif)){
			nuevoDepartamento();
			if(hasActionMessages())
				actionReturn = WebConstants.ERROR_NEW;
			
		}else if(WebConstants.GESTION_UPDATE.equals(typeModif)){
			modificarDepartamento();
			if(hasActionMessages())
				actionReturn = WebConstants.ERROR_UPDATE;
			
		}else if(WebConstants.GESTION_DELETE.equals(typeModif)){
			eliminarDepartamento();
			if(hasActionMessages())
				actionReturn = WebConstants.ERROR_DELETE;
			
		}
			
		return actionReturn;
	}
	
	private Departamento crearObjDepartamento(){
		Departamento dpto = new Departamento();
		
		dpto.setCodDepto(codDepto.toUpperCase());
		dpto.setNombreDepto(nombreDepto);
		dpto.setEstado(EstadoEnum.H);
		
		return dpto;
	}
	
	private void nuevoDepartamento(){
		Departamento dpto = crearObjDepartamento();
		GestionDepartamentoService dptoService = (GestionDepartamentoService) getContext().getBean("gestionDepartamentoService");
		
		try {
			dptoService.addDepartamento(dpto);
		} catch (DataIntegrityViolationException e) {
			addActionMessage("No se pudo crear el departamento porque ya existe uno con el mismo codigo");
		} catch (SQLException e) {
			addActionMessage("Error en base de datos");
		}
	}
	
	private void modificarDepartamento(){
		Departamento dpto = crearObjDepartamento();
		GestionDepartamentoService dptoService = (GestionDepartamentoService) getContext().getBean("gestionDepartamentoService");
		
		try {
			dptoService.updateDepartamento(dpto);
		} catch (DataIntegrityViolationException e) {
			addActionMessage("No se pudo modificar el departamento porque ya existe uno con el mismo codigo");
		} catch (SQLException e) {
			addActionMessage("Error en base de datos");
		}
	}

	private void eliminarDepartamento() {
		Departamento dpto = crearObjDepartamento();
		GestionDepartamentoService dptoService = (GestionDepartamentoService) getContext().getBean("gestionDepartamentoService");
		try {
			dptoService.deleteDepartamento(dpto);
		} catch (DataIntegrityViolationException e) {
			addActionMessage("No se pudo eliminar el departamento");
		} catch (SQLException e) {
			addActionMessage("Error en base de datos");
		}
	}

}